package com.tul.exercise.base.jmockit.atMocked;

import mockit.Mocked;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
 * 测试 @Mocked 用法
 *
 * @Mocked作用于测试类成员
 * 整个测试类中被mock的类型的所有实例都将被mocked，
 * 被mocked的类所有非private方法都将处于mocked状态,被mocked的方法默认返回值null
 *
 */
public class MockedAndInjectableTest1 {
    @Mocked
    ToBeMocked instance;

    @Test
    public void test() {
        // 方法fun 被mock，默认返回值为null
        System.out.println(instance.fun());
        assertTrue(instance.fun() == null);

        // 不管methodB方法中调用了私有方法methodA，methodB同样被mock，默认返回值null
        System.out.println(instance.fun());
        assertTrue(instance.methodB() == null);

        // @Moced 注解会对该类的所有实例进行mock
        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(instance.fun());
        assertTrue(newInstance.fun() == null);

    }
}
